#-*- coding:utf-8 -*-
# !/usr/bin/python

import xlrd
import os
import sys
import xml.dom.minidom
import xlwt
import re
from xml.etree.ElementTree import ElementTree
#from xlutils.copy import copy

# 用于循环遍历
LANGUAGE_TYPES = ['values-de-rDE', 'values-en-rUS', 'values-es-rES',
                  'values-fr-rFR', 'values-it-rIT', 'values-ar-rAE',
                  'values-ar-rEG', 'values-pt-rPT', 'values-ru-rRU',
                  'values-th-rTH', 'values-ko-rKR', 'values-zh-rHK',
                  #'values-zh-rCN'
                  ]

# 用于目录扫描后，判断是否属于下列类型的资源文件.
FILE_TYPE = ['strings.xml',
             'strings_bt.xml',
             'home_strings.xml',
             'arrays.xml',
             'string_arry.xml',
             'timezones.xml',
             'countries.xml']

# 支持的文件中的节点类型
NEED_NODES = ['string', 'item', 'timezone', 'country']


# 资源数据库 excel
LANGUAGE_DATABASE = "test123.xlsx"
# 数据库的excel文件的sheet 名称
SHEET_NAME = u'词条汇总表'

# DIR_PRE = 'values-ar-rAE' 过滤掉不属于 values
DIR_PRE = 'values-'

# 中文作为基准参考
CHINESE_TYPE = 'values-zh-rCN'

def test_values():

    # 获取 test excel 文件
    file_handler = xlrd.open_workbook(LANGUAGE_DATABASE)
    page = file_handler.sheet_by_name(SHEET_NAME)
    # 获取第一行的数据，即语言种类
    language_types = page.row_values(0)
    # 找到某个语言的所在列
    col_language = language_types.index(LANGUAGE_TYPES[10])
    # 获取某列的语言数据
    language_data = page.col_values(col_language)
    # 获取 第0行 第X列的数据.
    value = page.cell(0, col_language).value

    print 'value:' + value + " col_chinese:{0}".format(col_language)


    # 遍历excel中指定语言
    for language in language_types:
        if DIR_PRE in language:
            print "language:" + language
            # 获取该语言所在列
            col_language = language_types.index(language)

    print '==========================='

    # 获取当前路径
    work_dir = os.getcwd()
    print "work_dir:" + work_dir
    for parent, dir_names, file_names in os.walk(work_dir):
        print "parent:" + parent
        # 遍历指定的文件 如strings.xml
        for file_name in file_names:
            if file_name in FILE_TYPE:
                # 获取资源文件的路径
                file_path = os.path.join(parent, file_name)
                # 获取对应的字符串文件
                if 'values-zh-rCN' in parent:
                    print "    file_name:" + file_name + " file_path:" + file_path

    # 获取需要写入的文件
    tree = ElementTree()
    tree.parse(file_path)
    root = tree.getroot()
    # 遍历指定的节点
    for need_node in NEED_NODES:
        # 找到该节点在XML中对应的位置，并修改Value
        for name in root.iter(need_node):
            print (name.attrib)
            # 获取 资源ID，内容
            attrib = name.attrib
            text = name.text

'''
根据 xxx 项目下的中文作为基准，
读取XXX项目下的海外资源文件，
导出excel表格.
'''
def getAllXmlToExcel(pathName):
    # 获取当前目录路径
    workDir = os.getcwd()
    # 需要输出翻译的 项目 目录.
    filePath = os.path.join(workDir, pathName)

    # 获取 中文资源路径，作为主要标准
    chineseResPath = os.path.join(filePath, CHINESE_TYPE)

    if not os.path.exists(chineseResPath):
        print u'错误：你个沙雕！作为基准的中文目录(values-zh-rCN)都不存在，搞毛线!!!'
        return

    print u'基准目录:' + chineseResPath
    print 'start================================start'

    # 打开某个excel表格操作
    # 获取 test excel 文件
    #fileHandler = xlrd.open_workbook(LANGUAGE_DATABASE, formatting_info=True)
    #page = fileHandler.sheet_by_name(SHEET_NAME)
    # 创建工作簿
    wb = xlwt.Workbook()
    # 创建sheet
    sheet1 = wb.add_sheet(SHEET_NAME, cell_overwrite_ok=True)
    sheet1.panes_frozen = True
    sheet1.horz_split_pos = 1

    titleStyle = getTitleStyle()
    style = setExcelStyle('Times New Roman', 220, True)

    # 获取第一行的所有 'values-th-rTH', 'values-ko-rKR', 'values-zh-rHK' ... ...
    #languagTypes = page.row_values(0)

    # excel 创建标题 中文
    # sheet1.write(0, 1, CHINESE_TYPE, style)
    sheet1.write(0, 1, CHINESE_TYPE, titleStyle)

    # 设置标题栏的高度
    sheet1.row(0).height_mismatch = True
    sheet1.row(0).height = 20 * 25
    sheet1.col(1).width = 6000  # 设置标题栏的列的宽度

    # 找到资源目录下面的 xml 文件.
    row = 1
    for fileType in FILE_TYPE:
        xmlChineseFilePath = os.path.join(chineseResPath, fileType)
        if os.path.exists(xmlChineseFilePath):
            # 获取需要读取的 xml文件(strings.xml, array.xml 等)
            chineseRoot = getXmlTree(xmlChineseFilePath)
            # 遍历指定的节点(string,item, time...等)
            for needNode in NEED_NODES: # BUG: arrays.xml 单独处理，后续完善.
                #
                for name in chineseRoot.iter(needNode):
                    col = 1
                    # 获取中文所在excel表格的某列
                    #chineseCol = languagTypes.index(CHINESE_TYPE)

                    # 获取 xml 中的 id. 用于查找其它资源文件的. arrays.xml 没有id，需要特殊处理一下.
                    idXml,index = getXmlID(fileType, name, chineseRoot, -250)
                    text = name.text
                    print u'找到ID:' + idXml + ' index:{0}'.format(index) + ' text:' + name.text #+ ' chineseCol:{0}'.format(chineseCol)
                    # 写入excel表格数据 values-zh-rCN 列表数据
                    sheet1.write(row, col, text, style)

                    # 获取某个海外的语言目录
                    print u'\t===============start海外资源目录读取start================='
                    for langType in LANGUAGE_TYPES:
                        langResPath = os.path.join(filePath, langType, fileType)
                        if os.path.exists(langResPath):
                            # 查找某列的 语言.
                            #langCol = languagTypes.index(langType)
                            # 创建某个语言的标题栏(excel)
                            col += 1
                            sheet1.write(0, col, langType, titleStyle)
                            sheet1.col(col).width = 6000 # 设置标题栏的列的宽度

                            print '\tlangResPath:' + langResPath #+ ' colLanguage:{0}'.format(langCol)
                            langRoot = getXmlTree(langResPath)
                            for langName in langRoot.iter(needNode):
                                # 判断 ID 是否一致.
                                langIdXml,langIndex = getXmlID(fileType, langName, langRoot, index)
                                if idXml == langIdXml:
                                    langText = langName.text
                                    print u'\t海外ID:' + langIdXml + ' text:' + langText
                                    # 找到 excel 表格对应的 语言写入，比如 values-en-rUS
                                    sheet1.write(row, col, langText, style)
                                    break
                    row+=1
                    print u'\t===============end海外资源目录读取end================='

    # 保存翻译文件excel
    # wb.save(LANGUAGE_DATABASE)
    wb.save(pathName + '.xlsx')
    print u'end===============完成海外资源文件导出=================end'

# 获取 ID.
def getXmlID(fileType, langName, langRoot, index_):
    langIdXml = ""
    if langName.attrib:
        langIdXml = langName.attrib['name']

    # 如果为 arrays.xml，特殊处理一下，获取父节点的ID，用于处理
    if fileType == 'arrays.xml':
        #langIdXml = "gps_items"
        for test1 in langRoot.findall('string-array'):
            #arraysText = test1.findall('item').text
            index = 0 # 用于定位 array.xml 的 item 的位置 index.
            for t in test1.iter('item'):
                #print t.text, langName.text
                if t.text == langName.text and (index_ == -250 or index_ == index):
                    langIdXml = test1.attrib['name']
                    return langIdXml, index
                    #break
                index+=1

    return langIdXml, 0

def getXmlTree(path):
    tree = ElementTree()
    tree.parse(path)
    root = tree.getroot()
    return root

# 标题栏的样式
def getTitleStyle():
    style = xlwt.easyxf(
        u'font:name 仿宋,height 240, colour_index black, bold on, italic off; align: wrap on, vert centre, horiz center;pattern: pattern solid, fore_colour light_orange;')
    # 设置
    return style

# 设置excel样式
def setExcelStyle(name, height, bold=False):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.name = name
    font.bold = bold
    font.color_index = 4
    font.height = height
    # 设置居中
    # alignment = xlwt.Alignment()
    # alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平方向
    # alignment.vert = xlwt.Alignment.VERT_TOP  # 垂直方向
    # style.alignment = alignment
    #
    return style

# test 创建excel
def testCreateExcel():
    # 创建工作簿
    f = xlwt.Workbook()
    # 创建sheet
    sheet1 = f.add_sheet(SHEET_NAME, cell_overwrite_ok=True)
    # 设置样式
    style = setExcelStyle('Times New Roman', 220, True)
    #
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    pattern.pattern_fore_colour = 5

    col = 0
    row = 0
    for item in LANGUAGE_TYPES:
        col += 1
        sheet1.write(row, col, item, style)

    f.save(LANGUAGE_DATABASE)

'''
使用方式 python test.py Misckey
Misckey是你的项目名称
'''
if __name__ == "__main__":
    print(sys.argv)
    #testCreateExcel()
    getAllXmlToExcel(sys.argv[1])
    #test_values()